#pragma once

#include "Number.h"
#include "Object.h"

/**
 * NBuffer 数字缓冲类，NumberBuffer
 *
 * 本类直接继承于 Number 数字类，意义在于加强数字与
 * 缓冲区之间的联系，即更新了数字，就是更新了缓冲区。
 * 这个类有三个属性：
 *
 * numbuf[12]:
 * 单纯的数字缓冲，在里面可以显示 0 - 9，以及负号。
 * 0 - 9 为 0x0 - 0x9;
 * 负号为 0xa;
 * 不显示任何内容为 0xd
 *
 * scibuf[4]:
 * 科学记数法缓冲，比如 13e34 的科学记数法尾部为 E34，
 * 则可以把 E34 存进缓冲，避免与 numbuf 混淆。最高支持
 * 到 _E38 和 E-38
 * 0 - 9 为 0x0 - 0x9;
 * 负号为 0xa (2.3E-3, 0.0023);
 * E 号为 0xc;
 * 不显示任何内容为 0xd;
 * 若最高位不显示任何内容，但需要表明要用到科学记数法
 * 的，为 0xb;
 *
 * NBuffer::dotpot:
 * 小数点相当于数码管的位移，比如：
 * 3.4 0 0 0 0 0 0
 * dotpot = 1;
 * 2 3 4 5 6.7 8 9
 * dotpot = 5;
 * 若是整数不显示小数点，则 dotpot = 0
 */
OBJECT_DECLARE (NBuffer, n_buffer)
#define N_BUFFER(any_obj) ((NBuffer*)(any_obj))
struct _NBuffer
{
        Number parent_instance;
        uint8  numbuf[12];
        uint8  scibuf[4];
        uint8  dotpot;
};

/**
 * @brief 格式化数字 Number 到数字缓冲当中（刷新数字缓冲区）
 *
 * @param obj 本对象
 */
void n_buffer_format (NBuffer* obj);